#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>

#include    <QLabel>
#include    <QProgressBar>
#include    <QSpinBox>
#include    <QFontComboBox>
#include    <QActionGroup>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_actFile_New_triggered();

    void on_actFile_Open_triggered();

    void on_actFile_Save_triggered();

    void on_actEdit_Copy_triggered();

    void HandelTextChanged();

    void HandelSelectionChanged();

    void on_actEdit_Cut_triggered();

    void on_actEdit_Paste_triggered();

    void on_actEdit_Clear_triggered();

    void on_actEdit_Undo_triggered();

    void on_actEdit_Redo_triggered();

    void on_actEdit_SelectAll_triggered();

    void on_actFont_Bold_triggered(bool checked);

    void on_actFont_UnderLine_triggered(bool checked);

    void on_actFont_Italic_triggered(bool checked);

    void on_actSys_ToggleText_triggered(bool checked);

    void HandelFontSize(int size);

    void HandelFont(const QFont& font);

    void HandelFontName(const QString& str);

    void on_plainTextEdit_selectionChanged();

private:
    void InitConnect();

    void BuildUI();

private:
    Ui::MainWindow *ui;
    bool m_isFileOpen = false;
    std::shared_ptr<QFile> m_file = nullptr;

    QLabel     *labFile;    //状态栏里使用
    QLabel     *labInfo;    //状态栏里使用
    QProgressBar    *progressBar1;  //状态栏上的进度条

    QSpinBox        *spinFontSize;  //字体大小
    QFontComboBox   *comboFontName; //字体名称

    QActionGroup  *actionGroup;     //Action分组，用于“中文”和“英文”的互斥选择

    void    buildUI(); //程序设计的UI初始化
    void    buildSignalSlots(); //手工关联信号与槽
};
#endif // MAINWINDOW_H
